#pragma once
#include "ridefactory.h"
#include "sgptr.h"
#include "sgcomposite.h"
#include "graphics/Texture.h"
#include "sgrotate.h"
#include "sgrotatearoundpoint.h"
#include "sgtranslate.h"


class ObservationTowerFactory :
	public RideFactory
{
public:
	ObservationTowerFactory(void);
	~ObservationTowerFactory(void);

	CSgObject* Create();
	virtual void AdvanceTime(const DWORD &, const DWORD &);

private:
	CSgPtr<CSgComposite> m_ObservationTower;
	CSgPtr<CSgComposite> CreateBase();
	CSgPtr<CSgComposite> CreatePole();
	CSgPtr<CSgComposite> CreateCar();
	CSgPtr<CSgRotateAroundPoint> m_rotate_point_1;
	CSgPtr<CSgTranslate> m_translate;
	int m_car_degrees;
	double m_car_height;
	double m_car_down_height;
	double m_total_height;
	double m_offset;
	

	CSgPtr<CSgComposite> InsideWall(void);
	CSgPtr<CSgComposite> OutsideWall(void);

	CSgPtr<CSgComposite> CreateDoughnut(double m_in_radius, double m_out_radius);
	CSgPtr<CSgComposite> Shell(double height, double radius);
	CSgPtr<CSgComposite> InverseShell(double m_height, double m_radius);
	CSgPtr<CSgComposite> CreateRail(double m_radius);
	CSgPtr<CSgComposite> CreateAntenna(void);
	CSgPtr<CSgComposite> ConicalFrustum(double m_height, double bottom_radius, double top_radius);
	CSgPtr<CSgComposite> Disk(double m_radius);

	CTexture *m_texture1;
	CTexture *m_texture2;
	CTexture *m_texture3;
	CTexture *m_texture4;
	CSgPtr<CSgComposite> CreateBench(void);
public:
	CSgPtr<CSgComposite> CreateSign(void);
};